// 引入axios的核心库以及一些规则定义方法
import axios, { AxiosInstance, AxiosResponse, AxiosRequestConfig } from 'axios'
//引入自定义的数据接口
import { ResultData } from './interface'
//封装配置方法
let config = {
    //基础地址
    baseURL: '/api'
}

//封装一个请求类 这个类中包含了拦截器，包含了 get/post方法
class HttpRequest {
    //创建一个http的属性 代表的就是axios
    http: AxiosInstance
    constructor(config: AxiosRequestConfig) {
        //重新实例化了一个axios
        this.http = axios.create(config)
        //请求拦截器
        this.http.interceptors.request.use((req:any) => {
            //req 代表的就是请求参数
            //进行token的验证
            // console.log(sessionStorage.getItem('userinfo'), 'token');
            if (req.url != '/api/userlogin') {
                req.headers.authorization = sessionStorage.getItem('userinfo') ? JSON.parse(sessionStorage.getItem('userinfo') || '').token : null
            }

            return req
        })
        //响应拦截器
        this.http.interceptors.response.use(res => {
            //全局拦截错误以及数据响应
            return res.data
        })
    }
    /* 
        封装get方法
        url
        params
    */
    get<T>(url: string, params?: object): Promise<ResultData<T>> {
        return this.http.get(url, { params })
    }
    /* 
     封装post 方法
    */
    post<T>(url: string, params?: object): Promise<ResultData<T>> {
        return this.http.post(url, params)
    }
}

//导出封装好的类
export default new HttpRequest(config)

